package com.lyf.scm.plan.insfrastructure.db.mapper;

import com.lyf.scm.plan.domain.remote.bigdata.dto.BigDataGeneralInfoDTO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.DemandPlanDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.SalesPlanSelectDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.bigdata.SafetyStockUpDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * description:
 * 需求计划
 *
 * @author: haodong
 * @data: 2020/8/7 16:26
 */
public interface DemandPlanMapper {


    /**
     * 先查询需要展示的条数
     *
     * @param salesPlanSelectDO
     * @return {@link List}
     */
    List<DemandPlanDO> listDemandPlanBySelective(SalesPlanSelectDO salesPlanSelectDO);

    /**
     * 查询出销售计划量和直营预测计划量
     *
     * @param demandPlanDO 销售计划选择做
     * @return {@link List<DemandPlanDO>}
     */
    List<DemandPlanDO> listSalesAndDirectTarget(DemandPlanDO demandPlanDO);

    /**
     * 查询需求计划对应柱形图的指标
     *
     * @param dtoToDO dto做
     * @return {@link DemandPlanDO}
     */
    List<DemandPlanDO> listAllByCycles(SalesPlanSelectDO dtoToDO);

    /**
     * 查询表中存在的数据
     *
     * @param demandPlanDOS 需求计划dos
     * @return {@link List<DemandPlanDO>}
     */
    List<DemandPlanDO> listExistData(@Param("demandPlanDOS") List<DemandPlanDO> demandPlanDOS);

    /**
     * 更新数据
     *
     * @param updateList 更新列表
     * @return {@link Integer}
     */
    Integer updateData(@Param("updateList") List<DemandPlanDO> updateList);

    /**
     * 插入数据
     *
     * @param insertList
     * @return
     */
    Integer saveData(@Param("insertList") List<DemandPlanDO> insertList);

    /**
     * 根据搜索条件查询出所有的数据
     *
     * @param dtoToDO dto做
     * @return {@link List<DemandPlanDO>}
     */
    List<DemandPlanDO> listAllByCondition(SalesPlanSelectDO dtoToDO);

    List<SafetyStockUpDO> listUpByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate);

    void updateSafetyStockById(@Param("list") List<BigDataGeneralInfoDTO> bigDataGeneralInfoDTOs,@Param("opSign") String opSign,@Param("storeCode") String storeCode,@Param("startDate") Date startDate);

    void deleteByOpSign(String opSign);

    /**
     * 删除对应标识的数据
     *
     * @param opSign
     */
    void delete(@Param("opSign") String opSign);
}
